package com.nisland.util;

import static org.junit.Assert.*;

import java.util.ArrayList;

import org.junit.Before;
import org.junit.Test;

public class ReflectionToolTest {
	// 테스트를 위한 내부 deummy Class 정의 	
	class Dummy{
		private String innerValue;
		
		public String getValue(){
			return "111";
		}
		public int getTen(){
			return 10;
		}
		
		public void setInnerValue(String innerValue){
			this.innerValue = innerValue;
		}
		public String getInnerValue(){
			return innerValue;
		}
	}
	
	@Before
	public void setUp() throws Exception {
	}

	@Test
	public void testGeGettertMethodNameList() {
		Dummy dumy = new Dummy();
		ArrayList methodNameList = ReflectionTool.geGettertMethodNameList(dumy);
		ArrayList expectNameList = new ArrayList();
		expectNameList.add("Value");
		expectNameList.add("InnerValue");
		expectNameList.add("Ten");
		/**
         * @TODO
         * methodNameList 에 메소드 명이 들어가는 순서가 불규칙하다는 가장하에 아래와 같은
         * 검증방법은 잘못됬음 따라서 불규칙한 배열의 equals 를 검증하는 방법을 찾아야함               
         */
		for(int i=0; i< methodNameList.size(); i++){
			System.out.println(methodNameList.get(i));
			assertEquals((String)methodNameList.get(i), (String)expectNameList.get(i));
		}
	}

	@Test
	public void testInvokeGetterMethod() {
		Dummy dumy = new Dummy();
		String value = (String)ReflectionTool.invokeGetterMethod("Value", dumy);
		assertEquals(value, "111");
	}

	@Test
	public void testInvokeSetterMethod() {
		Dummy dumy = new Dummy();
		ReflectionTool.invokeSetterMethod("InnerValue", "xxx", dumy);
		String value = dumy.getInnerValue();
		assertEquals(value, "xxx");
	}

}
